[AWS Transfer Family web apps] S3にアクセスできるWebアプリケーションをさくっと作ってみた

[AWS Transfer Family web apps] S3にアクセスできるWebアプリケーションをさくっと作ってみた

こんにちは、豊島です。

はじめに

Announcing AWS Transfer Family web apps for fully managed Amazon S3 file transfersを見て
S3のファイルを操作できるWebアプリケーションがコード不要で作成できるとあったので、構築してみました。

準備

  • IAM Identity Center が有効になっていること
  • WebアプリケーションからアクセスしたいS3バケットが作成済みであること

構築手順(ざっくり)

  1. AWS Transfer Familyからウェブアプリを作成
  2. ウェブアプリにIdentity Centerのユーザー or グループを割り当てる
  3. S3 Access Grantsを作成
    1. S3 バケットを選択
    2. アクセスしたいパス/プレフィクスを設定
    3. Permissionsを設定(Read/Write)
    4. プリンシパルタイプ(ユーザー or グループ)を設定
  4. S3にCORSポリシーを設定
  5. 完了

手順としては4ステップでWebアプリケーションが作成できます。
最後におまけとしてユーザー毎にアクセスを制限する方法を紹介します。
それでは解説していきます

AWS Transfer Familyからウェブアプリを作成

AWS Transfer Familyウェブアプリを選択します(最近発表されたため、新規と出ています)
Google Chrome-2024-12-03 at 14.04.34
必要な同時接続数を設定して次へを選択(2024年12月時点で1000が上限でした)
Google Chrome-2024-12-03 at 14.08.28
titleやロゴを設定していきます
Google Chrome-2024-12-03 at 14.14.34
ウェブアプリを作成を選択
Google Chrome-2024-12-03 at 14.15.00
アプリケーションが作成できました。次にIdentity Centerの情報を設定していきます

ウェブアプリにIdentity Centerのユーザー or グループを割り当てる

ウェブアプリIDを選択
Google Chrome-2024-12-03 at 14.29.46
ユーザーとグループの割り当てを選択
Google Chrome-2024-12-03 at 14.34.17
今回は既存を割り当てを選択します(既にIdentity Centerにユーザーやグループが作成されている状態)
Google Chrome-2024-12-03 at 14.35.19
設定したいユーザーを選択→割り当てるを選択
Google Chrome-2024-12-03 at 14.35.54

S3 Access Grantsを作成

次にS3のAccess Grantsを作成していきます
S3のサービスページからAccess Grants→権限を作成を選択
Google Chrome-2024-12-03 at 14.40.06
Identity Centerが設定されていない場合は追加し、権限を作成を選択
Google Chrome-2024-12-03 at 14.49.19
権限作成でのポイントは

  • サブプレフィックス
    • 許可の範囲を設定します。バケット全体でOKであれば*
  • 許可
    • Read/Writeの設定
  • 被付与者タイプ
    • 今回はIdentity Centerの情報から設定します
  • ディレクトリアイデンティティタイプ
    • Identity Centerのユーザーもしくはグループの単位で許可を設定できます
      • ここではユーザーを設定しました
        Google Chrome-2024-12-03 at 14.54.02

CORSの設定

最後にアプリケーションからS3にアクセスするためCORSを設定します

CORS設定内容

AWS Transfer Family > ウェブアプリから確認できるウェブアプリエンドポイントを設定します
テスト用として大雑把に設定しています

[
    {
        "AllowedHeaders": [
            "*"
        ],
        "AllowedMethods": [
            "GET",
            "PUT",
            "POST",
            "DELETE",
            "HEAD"
        ],
        "AllowedOrigins": [
            "https://{ウェブアプリエンドポイント}",
            "https://*.{ウェブアプリエンドポイント}"
        ],
        "ExposeHeaders": [
            "Access-Control-Allow-Origin"
        ]
    }
]

ウェブアプリのアクセスエンドポイントに接続→サインインするとアクセスが許可されたパスが表示されています
Google Chrome-2024-12-03 at 14.59.27

パスを選択して適当な画像をアップロードします
Google Chrome-2024-12-03 at 15.00.03
Google Chrome-2024-12-03 at 15.01.07
アップロードできました
今回の権限ではダウンロードはもちろん、フォルダの作成、コピー、削除も可能です
Google Chrome-2024-12-03 at 15.01.50

おまけ(アクセスできるパスをユーザー毎に制限してみる)

ファイルのアクセスが確認できたため、ユーザー毎にアクセスできるパスを制限してみます
例えば、部署Aの人は部署Bのパスにアクセスできない...といったシーンに活用できます
一例としてIdentity Centerのグループを利用し、グループを部署として扱います

事前準備、確認

Identity Centerで新しいユーザーを作成し、
新しいユーザー(masaya toyoshima 2)を作成、サインインしましたがAccess Grantsが作成されていないため、何も表示されません
Google Chrome-2024-12-03 at 15.11.22
Identity Centerからグループを作成していきます

  1. group-a(元のユーザー toyoshima masayaを設定)
  2. group-b(新しいユーザー masaya toyoshima 2を設定)
    を作成、及び設定します(group-bのユーザーについては構築手順1, 2を参照)
    Google Chrome-2024-12-03 at 15.12.56
    同様の手順でgroup bも作成しておきます
    Google Chrome-2024-12-03 at 16.52.04

Access Grantsの作成からサブプレフィックスを指定します
今回はgroup-a用としたいのでgroup-a/*を設定
許可を設定したい権限をチェックして
被付与者タイプをアイデンティティセンターからのディレクトリID
ディレクトリアイデンティティタイプをグループにします
同様の設定でgroup-aをgroup-bに置換して作成します
Google Chrome-2024-12-03 at 16.51.51
group-aのユーザーでログイン後、該当のディレクトリが表示されています(group-bはアクセス権限がないため表示されていない)
Google Chrome-2024-12-03 at 16.56.20
group-bのユーザーではgroup-bが表示されています(group-aはアクセス権限がないため表示されていない)
Google Chrome-2024-12-03 at 16.57.10

最後に

新しく発表されたAWS Transfer Family web appsでS3のファイルを操作できるWebアプリケーションを作成しました。
IAM Identity Centerが必須といった条件はあるものの、数ステップで構築が完了することに進化を感じました。
どなたかの参考になれば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.